// 96. 不同的二叉搜索树
// 给你一个整数 n ，求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种？
// 返回满足题意的二叉搜索树的种数。
// 示例一：
// 输入：n = 3
// 输出：5
// 思路: dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]
// 遍历i里面每一个数作为头结点的状态，用j来遍历。
// dp[i]+=dp[j-1]*dp[i-j]
/**
 * @param {number} n
 * @return {number}
 */
 var numTrees = function(n) {
    let dp = new Array(n+1).fill(0);
   dp[0] = 1;
   dp[1] = 1;
   for(let i = 2; i <= n; i++) {
       for(let j = 1; j <= i; j++) {
           dp[i] += dp[j-1] * dp[i-j];
       }
   }
   return dp[n];
};